package transitarios.entidades;

import java.io.Serializable;

import transitarios.uteis.Morada;

public abstract class AbstractPessoa implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	/**
	 * 
	 */
	private String codigo;
	private Morada morada;
	private String nacionalidade;
	private String nome;
	private int numeroContribuinte;

	public AbstractPessoa() {
		this.morada = new Morada();
		this.nacionalidade = "";
		this.nome = "";
		this.numeroContribuinte = 0;
		this.codigo = "";

	}

	public AbstractPessoa(Morada morada, String nacionalidade, String nome,
			int numeroContribuinte, String codigo) {
		this.morada = morada;
		this.nacionalidade = nacionalidade;
		this.nome = nome;
		this.numeroContribuinte = numeroContribuinte;
		this.codigo = codigo;
	}

	public int compareTo(AbstractPessoa o) {
		return this.getCodigo().compareTo(o.getCodigo());
	}

	@Override
	public boolean equals(Object obj) {

		if (this == obj) {
			return true;
		}

		if ((obj == null) || (obj.getClass() != this.getClass())) {
			return false;
		}

		AbstractPessoa o = (AbstractPessoa) obj;
		return ((this.codigo).equals(o.getCodigo())
				&& (this.morada).equals(o.getMorada())
				&& (this.nacionalidade).equals(o.getNacionalidade())
				&& (this.nome).equals(o.getNome()) && (this.numeroContribuinte) == o
					.getNumeroContribuinte());

	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#getCodigo()
	 */

	public String getCodigo() {

		return this.codigo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#getMorada()
	 */

	public Morada getMorada() {
		return this.morada;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#getNacionalidade()
	 */

	public String getNacionalidade() {
		return this.nacionalidade;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#getNome()
	 */

	public String getNome() {
		return this.nome;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#getNumeroContribuinte()
	 */

	public int getNumeroContribuinte() {
		return this.numeroContribuinte;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#setCodigo(java.lang.String)
	 */

	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#setMorada(Uteis.Morada)
	 */

	public void setMorada(Morada morada) {
		this.morada = morada;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#setNacionalidade(java.lang.String)
	 */

	public void setNacionalidade(String nacionalidade) {
		this.nacionalidade = nacionalidade;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#setNome(java.lang.String)
	 */

	public void setNome(String nome) {
		this.nome = nome;
	}

	/*
	 * (non-Javadoc)
	 * 
	 * @see Uteis.Pessoa#setNumeroContribuinte(long)
	 */

	public void setNumeroContribuinte(int numeroContribuinte) {
		this.numeroContribuinte = numeroContribuinte;
	}

	/** toString() */

	@Override
	public String toString() {
		StringBuilder s = new StringBuilder();
		s.append("\n========DADOS PESSOAIS========\n");
		s.append("Codigo: " + this.codigo + "\n");
		s.append("Nome: " + this.nome + "\n");
		s.append("NIF: " + this.numeroContribuinte + "\n");
		s.append("Nacionalidade: " + this.nacionalidade + "\n");
		s.append("============MORADA============\n" + this.morada.toString()
				+ "\n");
		s.append("==============================\n==============================");
		return s.toString();
	}

}
